1. Field of the Invention
This invention is generally related to the cooperative execution of computer programs on distributed computer systems and, in particular, to an asymmetric translation of computer executable programs to enable computer programs to be efficiently executed on alternative platforms and in alternative execution environments.
2. Description of the Related Art
The proliferation of distributed computing platforms of varying nature and capability is creating a problem for computer system and software manufacturers. Practicalities increasingly require manufacturers to quickly, if not immediately, provide and maintain cross-platform software system execution compatibility. These software systems are often complex and typically involve distributed components executed on multiple computer platforms. Compatibility is naturally required for major existing computing platforms as well as significant new platforms.
Earlier in the history of distributed computing systems, the local execution environments provided by servers and client computer platforms were sufficiently definite, if only through a constraint policy of homogenous configuration, to ensure that these software-based systems could be reliably executed. Now, wide-area data communications are increasingly available, coupled with an expectation of use, and demand for flexibility, both personal and by businesses, in computing platform choice, particularly of client platforms. Configuration presumptions and policies are no longer sufficient.
A related problem arises whenever there are significant changes, including obsolescence, of a previously supported computer platform. Where the local executing environment is significantly modified, involved changes are often required to preserve or restore cross-platform compatibility. For obsolescence, the software system must be ported to a new computer platform. Both require the investment of significant resources. A functional, business, or other requirement to adapt the software system to any new local executing environment will also require the same resource investment.
In order to reduce the resource investment to achieve cross-platform compatibility, many complex software systems have been developed utilizing the Java™ platform and programming language (www.java.com; Sun Microsystems, Inc., Santa Clara, Calif.). In a classic programming environment, source code is compiled target specific to a particular operating system and corresponding executable format. Although language standardization and cross-compilers significantly aid in producing cross platform compatible executables, as a practical matter, significant distinctions remain and full compatibility is often difficult to obtain and, further, to maintain over the life of a software system.
A key benefit of Java is an additional layer of platform independence is provided through use of a Java Virtual Machine (JVM). The Java language compiler compiles Java source code (signified with a .java file extension) to an intermediate binary representation known as Java bytecode (signified with a class file extension). The Java bytecode is then functionally interpreted by a platform specific JVM. That is, the bytecode is interpreted against a fixed virtual machine model through the execution of the JVM by the host platform. In modern JVM implementations, bytecode may be further compiled, in part, and executed as target specific platform binary code. As a result, bytecode is often conventionally described simply as being executed. By isolating target platform specifics within the JVM, platform independent Java source code can be developed and maintained with lowered resource costs.
In order to more efficiently leverage the JVM, a Java Run-Time Environment (JRE) is supplied as a library adjunct to the JVM. For user programs written in Java for execution by the JVM, the JRE provides a standardized set of application programming interfaces (APIs), defined as methods within classes grouped in packages, to provide standard services, such as filesystem, graphics, and network access support. While the JRE APIs are target independent, the implementation of the JRE libraries includes both cross-platform and platform-specific bytecode as appropriate to access and utilize the functionality of the underlying operating system environment, or that of other programs and libraries that exist in the local execution environment. Use of platform-specific bytecode within the JRE is entirely transparent to Java programs.
The platform-specific JREs have been developed by Sun and others for a wide variety of target platforms including those that deployed as server and client tiers in the implementation of distributed computer systems. In a server execution environment, the Java programs are typically used to implement business logic, access database storage, and interact with other programs, services, and systems, both local and remote relative to the server tier. Conventionally, these Java programs may be collectively referred to as “web applications,” where communications are routed over a network, including the Internet or an intranet, utilizing the Java networking APIs, where the targeted client application is a Web browser, or where the communications protocol is a HTML-based or similar markup language.
In a client execution environment, Java programs conventionally run either in a JVM executed directly by the client computer platform or in a JVM plugin embedded in a Web browser. Where directly executed by the client computer system, the JRE and JVM have essentially direct access to the operating system and other programs and services available in the local execution environment. Where executed under a JVM plugin, such access is constrained by the security model of the Web browser and, from a performance perspective, further limited by the browser plugin architecture. Although the JVM and modern Web browsers are substantially optimized, the routing of communications through the Web browser, check constraints on the operating behavior of the Java program, as well as the requirement for co-execution of both the Java program, JVM, and Web browser introduces certain performance penalties. Conventionally, the JVM plugin is considered a heavy-weight plugin, requiring substantial persistent storage space and substantial active memory and processor resources for execution even for small Java programs. In view of these drawbacks to browser-based execution of Java programs, a Java Web-Start package was developed by Sun. This package enables initial provisioning of a Java program through a Web-browser connection, but otherwise permits execution of the client application in a JVM directly hosted on the client platform.
Given the benefits of Java-based server and client programs, industry and popular adoption of Java has been substantial to date and is likely to continue for a substantial period of time. Unfortunately, many newer client computer platforms either do not possess sufficient resources to support execution of a complete JRE/JVM package or otherwise prefer to support other client-oriented technologies including other, relatively light-weight plugins to provide services and functions that could otherwise be implemented through a Java program. Even where sufficient resources are present, there is always a distinct, though generalized desire for improved program execution performance on all platforms.
Consequently, a distinct need exists for system architecture oriented improvements capable of improved support for cross-platform program execution and, in particular, improvements in the ability to efficiently execute Java programs in multiple distinct local execution environments including those without JVM support.